package com.hex.ds.hdtp.core.inf.metadata.repository.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.hex.ds.hdtp.core.inf.common.constant.CoreConst;
import com.hex.ds.hdtp.core.inf.common.page.Page;
import com.hex.ds.hdtp.core.inf.common.page.converter.IPageAndMyBatisPlusPageConverter;
import com.hex.ds.hdtp.core.inf.metadata.mapper.ISourceConfTemplateMapper;
import com.hex.ds.hdtp.core.inf.metadata.po.SourceConfTemplatePo;
import com.hex.ds.hdtp.core.inf.metadata.repository.ISourceConfTemplateRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @Package: com.hex.hdc.center.inf.metadata.repository
 * @ClassName SourceConfTemplateRepository
 * @Description: 数据源配置模板
 * @Author: wz.li
 * @Date 2022/5/7 14:38
 * @Version v2.0.2
 **/
@Component
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class SourceConfTemplateRepository implements ISourceConfTemplateRepository {

    private final ISourceConfTemplateMapper sourceConfTemplateMapper;

    private final IPageAndMyBatisPlusPageConverter pageConverter;

    /*
     * @Method: queryListByPage <br>
     * @Param: [SourceConfTemplate, page] <br>
     * @Return: com.hex.hdc.center.domain.common.page.Page<com.hex.hdc.center.domain.metadata.SourceConfTemplate> <br>
     * @Description：分页查询数据源配置模板<br>
     * @Author： wz.li<br>
     * @Date： 2022/5/7 14:48 <br>
     * @Version： V2.0.2<br>
     */
    @Override
    public Page<SourceConfTemplatePo> queryListByPage(SourceConfTemplatePo sourceConfTemplatePo, Page<SourceConfTemplatePo> page) {
        final IPage tmpPageResult = sourceConfTemplateMapper.queryListByPage(
                pageConverter.toMyBatisPlusPage(page)
                , sourceConfTemplatePo
        );
        final List list = tmpPageResult.getRecords();
        final Page pageResult = pageConverter.toPage(tmpPageResult);
        return pageResult.setData(list);
    }

    /*
     * @Method: queryListBySourceType <br>
     * @Param: [sourceType] <br>
     * @Return: java.util.List<com.hex.hdc.center.domain.metadata.SourceConfTemplate> <br>
     * @Description：查询指定数据源类型的可用配置<br>
     * @Author： wz.li<br>
     * @Date： 2022/5/7 16:23 <br>
     * @Version： V2.0.2<br>
     */
    @Override
    public List<SourceConfTemplatePo> queryListBySourceType(String sourceType) {
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("conf_type", sourceType);
        queryWrapper.eq("status", CoreConst.DATA_STATUS_ENABLE);
        List<SourceConfTemplatePo> list = sourceConfTemplateMapper.selectList(queryWrapper);
        return list.stream().sorted(Comparator.comparing(SourceConfTemplatePo::getShowSort)).collect(Collectors.toList());
    }


    /*
     * @Method: queryById <br>
     * @Param: [pkId] <br>
     * @Return: com.hex.hdc.center.domain.metadata.SourceConfTemplate <br>
     * @Description：根据主键查询数据源配置模板<br>
     * @Author： wz.li<br>
     * @Date： 2022/5/7 14:48 <br>
     * @Version： V2.0.2<br>
     */
    @Override
    public SourceConfTemplatePo queryById(String pkId) {
        return sourceConfTemplateMapper.selectById(pkId);
    }

    /*
     * @Method: add <br>
     * @Param: [sourceConfTemplate] <br>
     * @Return: java.lang.Integer <br>
     * @Description：新增数据源配置模板<br>
     * @Author： wz.li<br>
     * @Date： 2022/5/7 14:48 <br>
     * @Version： V2.0.2<br>
     */
    @Override
    public Integer add(SourceConfTemplatePo sourceConfTemplatePo) {
        return sourceConfTemplateMapper.insert(sourceConfTemplatePo);
    }

    /*
     * @Method: modifyById <br>
     * @Param: [sourceConfTemplate] <br>
     * @Return: java.lang.Integer <br>
     * @Description：更新数据源配置模板<br>
     * @Author： wz.li<br>
     * @Date： 2022/5/7 14:49 <br>
     * @Version： V2.0.2<br>
     */
    @Override
    public Integer modifyById(SourceConfTemplatePo sourceConfTemplatePo) {
        return sourceConfTemplateMapper.updateById(sourceConfTemplatePo);
    }

    /*
     * @Method: removeById <br>
     * @Param: [pkId] <br>
     * @Return: java.lang.Integer <br>
     * @Description：删除数据源配置模板<br>
     * @Author： wz.li<br>
     * @Date： 2022/5/7 14:49 <br>
     * @Version： V2.0.2<br>
     */
    @Override
    public Integer removeById(String pkId) {
        return sourceConfTemplateMapper.deleteById(pkId);
    }

}
